package response

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// PageResponse 分页响应结构
type PageResponse[T any] struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    T      `json:"data"` // 当前页的数据列表
	Meta    Meta   `json:"meta"` // 分页元信息
}

// Meta 分页元信息结构
type Meta struct {
	Total      int64 `json:"total"`     // 总条数
	Page       int   `json:"page"`      // 当前页码
	PageSize   int   `json:"page_size"` // 每页条数
	TotalPages int   `json:"pages"`     // 总页数
}

// SuccessWithPage 分页成功响应
func SuccessWithPage[T any](c *gin.Context, data T, total int64, page int, pageSize int) {
	// 计算总页数：总条数 / 每页条数，有余数就加1
	totalPages := int(total) / pageSize
	if total%int64(pageSize) > 0 {
		totalPages++
	}

	c.JSON(http.StatusOK, PageResponse[T]{
		Code: 0,
		Data: data,
		Meta: Meta{
			Total:      total,
			Page:       page,
			PageSize:   pageSize,
			TotalPages: totalPages,
		},
	})
}
